conda包管理更新 您所在的位置:网站首页 conda 更新包 conda包管理更新

conda包管理更新

#conda包管理更新| 来源: 网络整理| 查看: 265

基础用法使用 conda 作为包管理工具

虽然 conda 官网写到 conda 能为 Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN 这么多的语言提供包、依赖关系和环境的管理,但是目前最普及最常见的仍是使用 conda 作为 Python 的包管理工具。

所以,本文就要讲讲 conda 作为 C++ 包管理工具的一个使用方式。

conda env

在了解 conda 如何为 C++ 提供包管理功能之前我们先了解一下几个小知识点。

-I -L

以 gcc 为例,-I 告诉编译器头文件的搜索目录,-L 则是添加链接库的搜索目录,编译器会在对应的目录下搜索所需要的头文件或者库文件。

env 的目录结构conda create -n conda_example_env

先创建一个 conda env,我们看下此时的 env 的目录结构:

只有一个 conda-meta 文件。

接下来我们安装一下 C++ 单元测试框架库 gtest。

conda activate conda_example_env conda install -c conda-forge gtest -y

安装完成后,conda list 检查一下 :

再看一下 env 的目录结构发生了什么变化:

多了 include 和 lib 目录,里面分别放着 gtest 以及它所依赖的头文件和库文件。

CMake Project

既然 conda 能方便地把我们需要的库下载到 conda env 中,那么我们如何方便地这些目录配置到项目中呢?

以 cmake 项目为例:

if (NOT $ENV{CONDA_PREFIX} STREQUAL "") message(STATUS "CURRENT CONDA PREFIX: $ENV{CONDA_PREFIX}") include_directories($ENV{CONDA_PREFIX}/include) link_directories($ENV{CONDA_PREFIX}/lib) endif ()

注:把以上代码添加到 cmake 项目根目录的 CMakeLists.txt 中,在编译目标 target 之前。

通过读取环境变量 CONDA_PREFIX ,获得当前 activate 的环境所在目录,再将对应的头文件目录和库文件目录导入到当前的 cmake 项目中。

完整的 CMakeLists.txt

cmake_minimum_required(VERSION 3.23) project(cmake_conda_example) set(CMAKE_CXX_STANDARD 14) if (NOT $ENV{CONDA_PREFIX} STREQUAL "") message(STATUS "CURRENT CONDA PREFIX: $ENV{CONDA_PREFIX}") include_directories($ENV{CONDA_PREFIX}/include) link_directories($ENV{CONDA_PREFIX}/lib) endif () add_executable(cmake_conda_example main.cpp) target_link_libraries(cmake_conda_example gtest)

完整的 main.cpp

#include int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } 构建本地 channel

以上例子使用的是开源的资源(conda-forge),如果是想要发布自己的动态库、二进制,又该怎么做呢?

conda-build

安装使用详见官方文档: Conda-build documentation

提供一个简单的使用 cmake 发布二进制工具的 conda-build 模板作为参考。 文件:

- build.sh - meta.yaml - run.sh - src # 文件夹build.sh#!/bin/bash set -e mkdir tmp_build cd tmp_build cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_BUILD_TYPE=Release make -j 4 make installmeta.ymlpackage: name: test_bin version: "0.0.1" source: path: ./src build: include_recipe: False arch: linux number: {{ environ.get('BUILD_NUMBER', 0) }} requirements: build: - make - cmakerun.sh#!/bin/bash set -e export CONDA_BLD_PATH=build if [ -d "build" ]; then rm -rf build fi mkdir build conda build .src

在 src 目录中,包含一个 CMakeLists.txt 以及需要发布的二进制工具。

CMakeLists.txt

cmake_minimum_required(VERSION 3.16) project(test_bin) install(PROGRAMS test_bin DESTINATION bin RENAME test_bin)

二进制工具和 CMakeLists.txt 放在同一个目录下。

执行 --> sh run.sh,可得到二进制工具的 conda-package 。

本地 channel

既然已经有了 conda-package,那么如何可以通过 conda 进行查询安装等操作呢? 详见官方文档: Creating custom channels — conda 23.1.0 documentation

创建本地 channelmkdir -p channel/dev

注意:创建的是两层目录

索引 channelconda index channel/dev更新 conda-package

再根据想要支持的平台,创建对应的文件夹。

把二进制的 conda-package 放到对应的目录中,不要忘记更新索引: conda index channe/dev

配置 ~/.condarc

为了方便使用,我们将 channel 配置到 ~/.condarc 中,简化操作。

custom_channels: dev: file:///mnt/www/channel

注意:完整的 url 为:file:///mnt/www/channels + / + dev

这样在 conda 操作时附加上 -c dev 即可选择本地的 channel。

构建 conda channel 服务

那么,如果要将本机的 conda channel 分享给其他人使用,又该怎么做呢?我们可以借助 nginx 来完成。

nginxnginxAdvanced Load Balancer, Web Server, & Reverse Proxy - NGINXHow To Install Nginx on Ubuntu 20.04 | DigitalOcean nginx 安装详见以上文章。nginx configsudo vim /etc/nginx/sites-available/conda_channel

Conda_channels 内容如下:

server { listen 6868; root /path-to/channel; access_log /var/log/conda_channel.access; error_log /var/log/conda_channel.error; location /dev/ { autoindex on; } }

根据实际信息修改 listen,root 的内容.

接下来将配置链接到 sites-enabled 目录下:

cd /etc/nginx/sites-enabled sudo ln -s /etc/nginx/sites-available/conda_channel conda_channel

启动 nginx

sudo nginx

如果已经启动,使用 sudo nginx -s reload 重新加载配置.

为 channel 添加用户名和密码Add usersudo sh -c "echo -n 'lindadou:' >> /etc/nginx/.htpasswd"

一定要有 : 作为分隔符。

Add encrypt passwordsudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

参考

- How Do I Set A Username And Password For Nginx?

- Restricting Access with HTTP Basic Authentication | NGINX Plus

修改配置server { listen 6868; root /path-to/channel; access_log /var/log/conda_channel.access; error_log /var/log/conda_channel.error; location /dev { try_files $uri $uri/ =404; auth_basic "Restricted Content"; auth_basic_user_file /etc/nginx/.htpasswd; } location /dev/linux-64/ { autoindex on; } }

修改完配置后记得重启或 reload nginx。

更新 ~/.condarc

custom_channels: dev: http://lindadou:"密码明文"@localhost:6868/

其他:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有